﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NHibernate;
using schedulelist.ORM.dao.classes;
using schedulelist.ORM.dao.interfaces;
using schedulelist.ORM.mapping;
using schedulelist.ORM.dao;
using schedulelist.ORM.domain;

namespace schedulelist
{
    public partial class TempPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e){}

        //обработчик на обновление текущей страницы
        protected void Page_Prerender(object sender, EventArgs e)
        {   
            ISession session = (ISession)Session["hbmsession"];
            DAOFactory factory = new NHibernateDAOFactory(session);
            if (factory.getUserDAO().getUserByLogin(Login.CurrentLog) == null)
            {
                Response.Redirect("~/Login.aspx");
            }
            Button1.Visible = true;//кнопка "confirm"
            Button2.Visible = true;//кнопка "cancel"
            switch (SiteMaster.tabletype){ 
                case 1://готовим отображение таблицы Category
                    Label9.Text = "Dealing with categories";
                    Label2.Text = "name";
                    Label2.Visible = true;
                    TextBox2.Visible = true;
                    if (!SiteMaster.add) { TextBox2.Text = CatForm.name; }
                    break;
                case 2://готовим отображение таблицы customer
                    Label9.Text = "Dealing with customers";
                    Label2.Text = "name";
                    Label2.Visible = true;
                    Label3.Text = "priority";
                    Label3.Visible = true;
                    Label4.Text = "status";
                    Label4.Visible = true;
                    TextBox2.Visible = true;
                    DropDownList7.Visible = true;
                    TextBox4.Visible = true;
                    if (!SiteMaster.add)
                    {//получаем ранее сохраненные поля изменяемой записи
                            TextBox2.Text = CustForm.name;
                            DropDownList7.SelectedValue = CustForm.priority;
                            TextBox4.Text = CustForm.contacts;
                    }
                    break;
                case 3://готовим отображение таблицы departament
                    Label9.Text = "Dealing with departaments";
                    Label2.Text = "name";
                    Label2.Visible = true;
                    Label3.Text = "status";
                    Label3.Visible = true;
                    TextBox2.Visible = true;
                    TextBox3.Visible = true;
                    if (!SiteMaster.add) { 
                            //получаем ранее сохраненные поля изменяемой записи
                            TextBox2.Text = DepForm.name; 
                            TextBox3.Text = DepForm.status;
                    }
                    break;
                case 4://готовим отображение таблицы roles
                    Label9.Text = "Dealing with roles";
                    Label2.Text = "name";
                    Label2.Visible = true;
                    Label3.Text = "add tickets";
                    Label3.Visible = true;
                    Label4.Text = "edit ticks";
                    Label4.Visible = true;
                    Label5.Text = "user edit";
                    Label5.Visible = true;
                    Label6.Text = "viewing";
                    Label6.Visible = true;
                    Label7.Text = "set status";
                    Label7.Visible = true;
                    Label8.Text = "stats";
                    Label8.Visible = true;
                    TextBox2.Visible = true;
                    DropDownList1.Visible = true;
                    DropDownList2.Visible = true;
                    DropDownList3.Visible = true;
                    DropDownList4.Visible = true;
                    DropDownList5.Visible = true;
                    DropDownList6.Visible = true;
                    if (!SiteMaster.add) {
                        //получаем ранее сохраненные поля изменяемой записи
                        TextBox2.Text = RoleForm.name;
                        DropDownList1.SelectedValue = RoleForm.addt;
                        DropDownList2.SelectedValue = RoleForm.eot;
                        DropDownList3.SelectedValue = RoleForm.uedit;
                        DropDownList4.SelectedValue = RoleForm.rd;
                        DropDownList5.SelectedValue = RoleForm.setstat;
                        DropDownList6.SelectedValue = RoleForm.stat;
                    }
                    break;
                case 5://готовим отображение таблицы users
                    Label9.Text = "Dealing with users";
                    Label2.Text = "name";
                    Label2.Visible = true;
                    Label3.Text = "login";
                    Label3.Visible = true;
                    Label4.Text = "password";
                    Label4.Visible = true;
                    Label5.Text = "email";
                    Label5.Visible = true;
                    Label6.Text = "sex";
                    Label6.Visible = true;
                    Label7.Text = "role";
                    Label7.Visible = true;
                    Label8.Text = "department";
                    Label8.Visible = true;
                    TextBox2.Visible = true;
                    TextBox3.Visible = true;
                    TextBox4.Visible = true;
                    TextBox5.Visible = true;
                    DropDownList8.Visible = true;
                    DropDownList9.Visible = true;
                    DropDownList10.Visible = true;
                    IRoleDAO rDAO1 = factory.getRoleDAO();
                    List<Role> rl = rDAO1.GetAll();
                    foreach (Role rol in rl){
                        //Добавляем в DropDownList роли все записи из таблиц "Role"
                        DropDownList9.Items.Add(rol.name);
                    }
                    IDepartamentDAO dDAO1 = factory.getDepartamentDAO();
                    List<Departament> dd = dDAO1.GetAll();
                    foreach (Departament d in dd) {
                        //Добавляем в DropDownList депа все записи из таблиц "Departament"
                        DropDownList10.Items.Add(d.name);
                    }
                    if (!SiteMaster.add) {
                        //получаем ранее сохраненные поля изменяемой записи
                        TextBox2.Text = UserForm.name;
                        TextBox3.Text = UserForm.login;
                        TextBox4.Text = UserForm.pass;
                        TextBox5.Text = UserForm.email;
                        DropDownList8.SelectedValue = UserForm.sex.ToString();
                        Role r = rDAO1.getRoleByName(UserForm.role);
                        DropDownList9.SelectedValue = r.name;
                        Departament dep = dDAO1.getDepartamentByName(UserForm.dep);
                        DropDownList10.SelectedValue = dep.name;
                    }
                    break;
                case 6://готовим отображение таблицы tickets
                    Label9.Text = "Dealing with tickets";
                    Label2.Text = "owner";
                    Label2.Visible = true;
                    Label3.Text = "date_must";
                    Label3.Visible = true;
                    Label4.Text = "date_done";
                    Label4.Visible = true;
                    Label5.Text = "task";
                    Label5.Visible = true;
                    Label6.Text = "status";
                    Label6.Visible = true;
                    Label7.Text = "executor";
                    Label7.Visible = true;
                    Label8.Text = "customer";
                    Label8.Visible = true;
                    Label10.Text = "category";
                    Label10.Visible = true;
                    Label11.Text = "AddInf";
                    Label11.Visible = true;
                    DropDownList11.Visible = true;
                    TextBox3.Visible = true;
                    TextBox4.Visible = true;
                    TextBox4.Enabled=false;
                    TextBox5.Visible = true;
                    TextBox5.Height = 64;
                    TextBox5.TextMode = TextBoxMode.MultiLine; 
                    //TextBox6.Visible = true;
                    DropDownList15.Items.Remove("Completed");
                    DropDownList15.Visible = true;
                    DropDownList12.Visible = true;
                    DropDownList13.Visible = true;
                    DropDownList14.Visible = true;
                    DropDownList15.Enabled = false;
                    DropDownList12.Enabled = false;
                        IRoleDAO r1DAO1 = factory.getRoleDAO();
                    IUserDAO u1DAO1 = factory.getUserDAO();
                    List<User> us1 = u1DAO1.GetAll();
                    foreach (User u in us1){
                        //Добавляем в DropDownList роли все записи из таблиц "User"
                        DropDownList11.Items.Add(u.name);
                        DropDownList12.Items.Add(u.name);
                    }
                    //в поле "ex" пихаем нуль-юзера 
                    DropDownList12.SelectedValue = u1DAO1.getUserByName("-").name;
                    //в поле "owner" пихаем тек. юзера
                    DropDownList11.SelectedValue = Login.CurrentUser;
                    ICustomerDAO CuDAO1 = factory.getCustomerDAO();
                    List<Customer> c1 = CuDAO1.GetAll();
                    foreach (Customer c in c1){
                        //Добавляем в DropDownList роли все записи из таблиц "Customer"
                        DropDownList13.Items.Add(c.name);
                    }
                    ICategoryDAO CaDAO1 = factory.getCategoryDAO();
                    List<Category> ca1 = CaDAO1.GetAll();
                    foreach (Category ca in ca1) {
                        //Добавляем в DropDownList роли все записи из таблиц "Category"
                        DropDownList14.Items.Add(ca.name);
                    }
                    TextBox10.Visible = true;
                    if (!SiteMaster.add){
                        //получаем ранее сохраненные поля изменяемой записи
                        DropDownList11.Enabled = true;
                        DropDownList12.Enabled = true;
                        DropDownList15.Enabled = true;
                        TextBox3.Enabled = true;
                        //User u2 = u1DAO1.getUserByName(TicketsForm.owner);
                        //заполняем поля изменяемой записи ранее сохраненными
                        DropDownList11.SelectedValue = Login.CurrentUser;
                        TextBox3.Text = TicketsForm.dm;
                        TextBox4.Text = TicketsForm.dd;
                        TextBox5.Text = TicketsForm.task;
                        DropDownList15.SelectedValue = TicketsForm.status;
                        User u3 = u1DAO1.getUserByName(TicketsForm.ex);
                        DropDownList12.SelectedValue = u3.name;
                        Customer cus = CuDAO1.getCustomerByName(TicketsForm.cust);
                        DropDownList13.SelectedValue = cus.name;
                        Category cat4 = CaDAO1.getCategoryByName(TicketsForm.cat);
                        DropDownList14.SelectedValue = cat4.name;
                        TextBox10.Text = TicketsForm.addinf;
                    }
                    break;
            }
        }
        //confirm
        protected void Add_Item(object sender, EventArgs e)
        {
            ISession session = (ISession)Session["hbmsession"];
            DAOFactory factory = new NHibernateDAOFactory(session);
            switch (SiteMaster.tabletype){
                case 1:   //работаем с таблицей Category
                    ICategoryDAO CatDAO = factory.getCategoryDAO();
                    Category res = new Category();
                    //cоздаем обьект
                    if (!SiteMaster.add){
                        //если выбран режим изменения
                        //получаем обьект по имени
                        res = CatDAO.getCategoryByName(CatForm.name);}
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    res.name = TextBox2.Text;
                    CatDAO.SaveOrUpdate(res);
                    Response.Redirect("~/CatForm.aspx");
                    break;
                case 2://работаем с таблицей Customer
                    ICustomerDAO cDAO = factory.getCustomerDAO();
                    Customer c = new Customer();
                    //cоздаем обьект
                    if (!SiteMaster.add) {
                        //если выбран режим изменения
                        //получаем обьект по имени
                        c = cDAO.getCustomerByName(CustForm.name); }
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    c.name = TextBox2.Text;
                    c.priority = Convert.ToString(DropDownList7.SelectedValue);;
                    c.contacts = TextBox4.Text;
                    cDAO.SaveOrUpdate(c);
                    Response.Redirect("~/CustForm.aspx");
                    break;
                case 3://работаем с таблицей Departament
                    IDepartamentDAO depDAO = factory.getDepartamentDAO();
                    Departament d = new Departament();
                    //cоздаем обьект
                    if (!SiteMaster.add) {
                        //если выбран режим изменения
                        //получаем обьект по имени
                        d = depDAO.getDepartamentByName(DepForm.name); }
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    d.name = TextBox2.Text;
                    d.status = TextBox3.Text;
                    depDAO.SaveOrUpdate(d);
                    Response.Redirect("~/DepForm.aspx");
                    break;
                case 4://работаем с таблицей Role
                    IRoleDAO rDAO = factory.getRoleDAO();
                    Role r = new Role();
                    //cоздаем обьект
                    if (!SiteMaster.add) {
                        //если выбран режим изменения
                        //получаем обьект по имени
                        r = rDAO.getRoleByName(RoleForm.name); }
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    r.name = TextBox2.Text;
                    r.addt = Convert.ToBoolean(DropDownList1.SelectedValue);
                    r.eot = Convert.ToBoolean(DropDownList2.SelectedValue);
                    r.uedit = Convert.ToBoolean(DropDownList3.SelectedValue);
                    r.rd = Convert.ToBoolean(DropDownList4.SelectedValue);
                    r.setstat = Convert.ToBoolean(DropDownList5.SelectedValue);
                    r.stat = Convert.ToBoolean(DropDownList6.SelectedValue);
                    rDAO.SaveOrUpdate(r);
                    Response.Redirect("~/RoleForm.aspx");
                    break;
                case 5://работаем с таблицей User
                    IUserDAO uDAO = factory.getUserDAO();
                    User u = new User();
                    //cоздаем обьект
                    if (!SiteMaster.add) {
                        //если выбран режим изменения
                        //получаем обьект по имени
                        u = uDAO.getUserByName(UserForm.name); }
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    u.name = TextBox2.Text;
                    u.login = TextBox3.Text;
                    u.pass = TextBox4.Text;
                    u.email = TextBox5.Text;
                    u.sex = Convert.ToChar(DropDownList8.SelectedValue);
                    IRoleDAO r1DAO = factory.getRoleDAO();
                    u.Role = r1DAO.getRoleByName(DropDownList9.SelectedValue);
                    IDepartamentDAO ddDAO = factory.getDepartamentDAO();
                    u.Dep = ddDAO.getDepartamentByName(DropDownList10.SelectedValue);
                    uDAO.SaveOrUpdate(u);
                    Response.Redirect("~/UserForm.aspx");
                    break;
                case 6://работаем с таблицей Tickets
                    ITicketsDAO tDAO = factory.getTicketsDAO();
                    Tickets t = new Tickets();
                    //cоздаем обьект
                    if (!SiteMaster.add) {
                        //если выбран режим изменения
                        //получаем обьект по Id
                        t = tDAO.getTicketById(TicketsForm.id);
                        
                    }
                    //получаем с текстбоксов/DropDownListов значения
                    //запихиваем сохраненное в обьект
                    IUserDAO u3DAO = factory.getUserDAO();
                    User u1 = u3DAO.getUserByName(Login.CurrentUser);
                    u1.cnt_created++;
                    u3DAO.SaveOrUpdate(u1);
                    t.owner = u3DAO.getUserByName(DropDownList11.SelectedValue);
                    t.dm = TextBox3.Text;
                    t.dd = TextBox4.Text;
                    t.task = TextBox5.Text;
                    
                    t.status = DropDownList15.SelectedValue;
                    if (t.status == "Completed")
                    {
                        User u3 = u3DAO.getUserByName(Login.CurrentUser);
                        u3.cnt_made++;
                        u3DAO.SaveOrUpdate(u3);
                    }
                    t.ex = u3DAO.getUserByName(DropDownList12.SelectedValue);
                    ICustomerDAO cusDAO = factory.getCustomerDAO();
                    t.cust = cusDAO.getCustomerByName(DropDownList13.SelectedValue);
                    ICategoryDAO caDAO = factory.getCategoryDAO();
                    t.cat = caDAO.getCategoryByName(DropDownList14.SelectedValue);
                    t.addinf = TextBox10.Text;
                    tDAO.SaveOrUpdate(t);
                    Response.Redirect("~/TicketsForm.aspx");
                break;
            }
        }
        //отмена
        protected void Cancel(object sender, EventArgs e)
        {
            switch (SiteMaster.tabletype){
                    //...
                case 1: Response.Redirect("~/CatForm.aspx"); break;
                case 2: Response.Redirect("~/CustForm.aspx"); break;
                case 3: Response.Redirect("~/DepForm.aspx"); break;
                case 4: Response.Redirect("~/RoleForm.aspx"); break;
                case 5: Response.Redirect("~/UserForm.aspx"); break;
                case 6: Response.Redirect("~/TicketsForm.aspx"); break;
            }
        }
    }
}
